package com.example.erp;

import java.io.FileOutputStream;
import java.io.IOException;

import org.springframework.ai.openai.OpenAiAudioSpeechModel;
import org.springframework.ai.openai.OpenAiAudioSpeechOptions;
import org.springframework.ai.openai.api.OpenAiAudioApi;
import org.springframework.ai.openai.audio.speech.SpeechPrompt;
import org.springframework.ai.openai.audio.speech.SpeechResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import jakarta.annotation.Resource;

/**
 * 文字转语音
 */
@RestController
@RequestMapping("/openai")
public class Text2AudioController {

	@Resource
	private OpenAiAudioSpeechModel speechModel;

	@GetMapping("/text2audio")
	public void testSpeech() throws IOException {
		String text = """
				上海宝信软件股份有限公司（简称宝信软件）系中国宝武实际控制、宝钢股份控股的上市软件企业，总部位于上海自由贸易试验区。"
				"宝信软件依托钢铁及先进材料业雄厚产业基础和丰富应用场景，以信息高科技和资本为驱动，提供以钢铁业为代表的流程型制造数字化智慧化综合解决方案。"
				"历经40余年发展，公司在推动“两化”深度融合、赋能产业数智化转型等方面做出了突出的贡献，成为中国领先的工业软件行业应用解决方案和服务提供商，"
				"产品与服务业绩遍及钢铁、交通、有色、化工、矿山等多个行业。"
				""";

		byte[] res = speechModel.call(text);
		byteArrayToFile(res, "D:\\share\\aitest.mp3");
	}

	@GetMapping("/text2audio2")
	public void testSpeech2() throws IOException {

		String text = """
				作为央企旗下信息高科技公司及国产软件提供商，宝信软件深入践行“新基建”“产业链安全”“自主可控”等国家战略，结合工业软件技术底蕴与行业知识，
				推出自研的工业互联网平台宝联登（xIn3Plat），并持续入围国家“双跨”平台，积极打造赋能转型标杆品牌。
				公司把握前沿技术发展方向，借助商业模式创新，全面提供工业互联网、数据中心、大数据、云计算、人工智能、5G、工业机器人等相关产品和服务，
				致力于推动形成数据驱动、软件定义、平台支撑、服务增值、智能主导的新型制造体系，引领产业高质量发展，致力于成为一流的工业互联网科技公司。
				""";

		// 采用 tts-1-hd 模型
		OpenAiAudioSpeechOptions options = OpenAiAudioSpeechOptions.builder()
//				.model(OpenAiAudioApi.TtsModel.TTS_1_HD.getValue())
				.model("tts-1")
			    .voice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
				.responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
				.speed(1.0f)
				.build();
//		https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/audio/speech/OpenAiSpeechModelIT.java
//		text="Hello, this is a text-to-speech example.";
		
		SpeechPrompt prompt = new SpeechPrompt(text, options);
		SpeechResponse res = speechModel.call(prompt);
		byte[] bytes = res.getResult().getOutput();
		byteArrayToFile(bytes, "D:\\share\\testai2.mp3");			
	}


	// byte数组转文件
	private void byteArrayToFile(byte[] byteArray, String filePath) throws IOException {
		FileOutputStream fos = new FileOutputStream(filePath);
		fos.write(byteArray);
		fos.close();
	}
}
